約 1,033,592 件
https://w.atwiki.jp/fftsukurou/pages/107.html
プログラミング言語Lua この企画では、軽量なスクリプト言語としてLuaを使用しています。Luaは、シンプルかつ高速であり、手続き型プログラミング言語でありながら、オブジェクト指向プログラミング・関数型プログラミング・データ駆動型プログラミングもサポートしています。ゲーム業界では定番のスクリプト言語です。 スクリプト言語を使うことで、コンパイルすることなくゲームの振る舞いを変更できます。また、コンパイル言語(C++とか)に詳しくなくても、記述方法を少し覚えることで実装の一部を担うことができます。 今後、Luaによる実装ができるように拡張していく予定ですので、Luaを勉強しましょう! Luaについて知ろう! The Programming Language Lua …本家 Lua 5.2 Reference Manual …リファレンスマニュアル LuaBinaries …Luaのバイナリ配布。 lua-5.2.1_Win32_dll10_lib.zip をダウンロードしてリンクさせる プログラミング言語Luaの紹介 …Luaに関する日本語情報がまとまっています ゲームつくろー …Lua組み込み編、が参考になる そのほかにも、検索エンジンで探してみて下さい。 作業対象はどこ? ここ をクリックすると最新版をダウンロードできます。展開したフォルダ→data→eventに、Luaファイルがあります。スクリプト担当はこれらのファイルを編集していきます。なお、ゲームが起動しない場合は ここ からDLLファイルをダウンロードし、EXEファイルと同じ場所に配置してみて下さい。 キャラクターID 1番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 2番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 3番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 4番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 5番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 6番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 7番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 8番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 9番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 10番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 11番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 12番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 13番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 14番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 15番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 16番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 17番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 18番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 19番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 20番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 21番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 22番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 23番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 24番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 25番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 26番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 27番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 28番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 29番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 30番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 31番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 32番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 33番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 34番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 35番目 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 BGMID ID 名前 使用場面 着手状況 1 タイトル画面BGM タイトル画面 70/着手中/5.21 2 森BGM 冒頭の森 4-588/完成11/20 3 イベントBGM 冒頭の森でディノとマリアが出会う時に流れる mmk2の曲を編曲予定 100 バトルBGM 雑魚との戦闘 70/一応完成/9.12 101 勝利BGM 勝利したときの 4-588/完成/1.20 4 エデンフィールドBGM エデンフィールドマップ 4-588/着手中/5.15 5 祭り中のエルゼアBGM 祭り中のエルゼア 70/完成/8.29 6 エルゼア神殿BGM エルゼア神殿 70/完成/12.6 7 クリスタルのテーマソング クリスタルにまつわるBGM 70/完成/12.22 8 ピンチ時BGM 冒頭、ワープイベント 501/完成 9 ワールドフィールドBGM ワールドフィールドマップ 70/完成/2.7 10 魔道士の集落BGM 魔道士の集落 70/一応完成/6.15 11 盗賊の山道 70さんの楽しい山登り 102 ボスBGM ボスとの戦闘 4-588/完成/12.6 12 ワールド小規模街BGM トトス 70/完成/5.21 200 冒険者メモBGM メニュー内の冒険者のメモであった方がいい? 後回しで良いと思う 201 睡眠BGM 睡眠時 70/一応完成/11.16 202 イベントアイテム入手BGM プライズ入手や、仲間加入で使う? 未着手 チップID チップID(マップチップ)は、最初のチップ以外は全角及び半角の英字を読めないようなので、数字を用いています。スクリプトと関わるマップIDに比べて煩雑にはならないと思うので、使われる順に10、20…と振っていくことにし、1の位だけ差分にします。「ID,画像名」の形式になっており、ドッターがこれの修正したい点を修正してくだされば、その変更を反映させます。 「10,エデンフィールド1.bmp」 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 「11,エデンフィールド2.bmp」 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 「20,エデン町.bmp」 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 「21,エデン町_エルゼア.bmp」 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 「30,エデン室内.bmp」 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 「40,エデン神殿.bmp」 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 「50,ワールド村.bmp」 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 「60,eden_forest.bmp」 imageプラグインエラー ご指定のURLはサポートしていません。png, jpg, gif などの画像URLを指定してください。 マップ(及びluaスクリプトの)IDと、ffmファイル マップIDは 「進行度2桁」「街や洞窟の2桁」「その室内とか、番目とかの対応2桁」 という風にしています。 頭の進行度の00は例外的にフィールドに当ててます。 以降、 01は初期エデン、 02はワールド(トトスまで) 03以降はもう少し検討の上で(例外的なのに50を振ってます)。 この数字はluaスクリプトのmapevt以降の数字にも対応しています。 ffmファイルは一応マップIDと分離可能なので、 「エデン(1)かワールド(2)か」「半角英数の街名(洞窟名)」「屋外かどうか等の複数の場合数字を増やす」.ffm という形式にしています。 マップID 場所 状況等の情報 使用ffm 本体導入状況 000001 エデンフィールドマップ 1eden_field0.ffm ◯ 000002 ワールドフィールドマップ ○ 010101 エルゼアの森 物語冒頭の森 × 010201 エルゼア(祭り) 最初に訪れる、祭り中のエルゼア 1elzea_fes0.ffm ◯ 010202 エルゼア屋内 ◯ 010301 エルゼア神殿 1shinden0.ffm ◯ 020101 ワールドの丘 ワールドに最初にワープした時に辿りつく地点 2hill0.ffm ○ 020201 ワールド、魔道士の街 2mage_town0.ffm ○ 500101 FF製作初心者の館 1factory0.ffm ◯ スクリプト雑記 取りあえず新しい場所を追加して移動したい時。 1.ffmとマップチップ画像をdata/mapに入れる。 2.MapChipInfo.csvにマップチップを登録。 3.MapInfo.csvに登録。各列は、 スクリプトで使うID, マップの画面端から逆の端に移れるかどうか(0=NO,1=YES), 敵が出るか(0=NO,1=YES), フィールドマップか(0=NO,1=YES), ffmファイル名, ffmファイルの低層1で使ったチップファイルのMapChipInfo.csvで登録したID, 同様に低層2チップファイルID, 同様に高層チップファイルID 4.ワープのために、イベントを配置したluaの function GetMapObject( nID )以降の行に、このスクリプトを追加(スペースはtabを使うこと、半角英数のみを使う) +... if nID == イベント番号 then return { -- パラメータ Type = "FLOOR",-- 床 -- スクリプトトリガ ScriptTriger= "PLAYER_ON", Exec = function() Fadeout( 0, 0, 0, 60 )-- R, G, B, フレーム ChangeMap( MapInfo.csvで登録したマップID, ワープ後のマップでの位置x方向, ワープ後のマップでの位置y方向,ワープ後のマップでのプレイヤーの向き0なら下、1なら左、2なら上、3なら右 )-- MapID, X, Y, プレーヤ方向 end } end チップ番号 x行y列の場合 チップ番号=y-1+256*(x-1)
https://w.atwiki.jp/sm4wiki_mix/pages/54.html
ここは? 資料が英語ばかりの鬼門「HDMA」の説明らしき物です。 しかしHDMAはおろかWikiの編集も付け焼刃なのでグダグダです。 墓場のうんちくが来るまでの間に合わせってことでよろしく。 目次 ここは? 目次 描画あれこれ 走査線/Scanline、H-blank、V-blank 実際に描画するには まず何をすればいい? PPU チャンネルとテーブル テーブル チャンネル 補足 チャンネルとテーブルの関係 実践1:サイズの異なるモザイク チャンネルの設定 転送内容と効果 スクリーンあれこれ メインスクリーン、サブスクリーン 通常のLevelでの描画構成 実践2:固定色層の応用を考える 実践3:固定色層の応用を考える? 実践3:マルチレイヤースクロール 目的 RAM $210F 極めて遠くにあるもの それほど遠くないもの 補足 簡易説明 ウィンドウあれこれ コメント欄 描画あれこれ 走査線/Scanline、H-blank、V-blank SFCでは画面が1秒間に60フレームほど描かれている気がします。 そのうちの1回を取り上げて考えてみましょう。 まずは左上の1ドットから描画がスタートし、右上に向かいます。 こうして一番上の1行が描かれます。 こういった横方向の行を「走査線 Scanline」と言います。 一番上の行がScanline 0です。 二番目の行がScanline 1です。 一行目が右まで描かれると、次は二行目の左端を描くことになりますが、 それまでに僅かな休み時間があります。これがH-blankです。 同様に、各Scanlineの描画が終わるたびにH-blankが来ます。 ゲーム画面の一番下の行はScanline 225 です。 ここまで描ききった後のScanline 226〜261にあたる期間は もうずっと休み時間です。これをV-blankと言います。 H-blankが土日だとしたら、V-blankは長期休暇みたいなものなので長いです。 その後はScanline 0に戻り、次のフレームの描画が始まります。 実際に描画するには さて、なぜこんなblankの話をしてるかというと、 描画情報の変更はこのblank中でやらなければならないからです。 だからLevelASMとかで直接描画情報を変えようとしても、 その瞬間が奇跡的にblank中だった場合しかうまく行かないことになります。 ただしいくつかのエミュではこういうのを考慮してないので blank無視しても正常に動作してしまう罠。 実機で動かなくてもエミュで動けばいいじゃんと見るかどうかは人によるけど… 最新のエミュでは、ちゃんと(?)blank無視した変更は反映されないようになってます。 じゃあblankのタイミングを狙うにはどうすればいいのか? 1つは、NMIという割り込みを利用する方法です。 画面下、Scanline 225を描いてV-blankに突入した瞬間、 流れているプログラムは一旦ストップ。 Snes $00816Aから始まるNMIルーチンが割り込んできます。 この中でblank中でなければならない処理を まとめてやってしまうというのです。 しかしblankはV-blankだけではありません。 H-blank中に描画設定を変えるとどうなるでしょう。 たとえば、Scanline0の前で明るい画面に設定し、 Scanline112の後のH-blankで暗い画面に設定すれば、 画面上半分(0〜112)は明るく、画面下半分(113〜225)は暗くなります。 このようにScanlineとScanlineの間で描画設定を変えることができます。 こういった、指定したH-blankで描画設定を変えるという処理を 自動的にやってくれる装置があります。 これがHDMAです。 まず何をすればいい? まずはHDMAを実装しましょう。いくつか方法があります。 ・CからBMF98567氏のHDMAを持ってきてインストール ・自作物展示場や、あっぷろだXのASM_Supporter 余計な機能がつきすぎるのが嫌でなければ、 ASM_Supporterをオススメします。 後先考えるとインスタントNMIがあった方が便利っちゃあ便利。 xkasの使い方は、あっぷろだXを参照。 いや、CMのつもりでは… 要望があれば、HDMAだけを入れるバージョンも作りますが。 PPU さんざん「描画設定を変える」とかいう表現を使ってきたわけですが、 とりあえずそれがどういうことかを知らなければなりません。 SFCにはPPUというユニットがあり、 こちらのプログラムとは独立して、描画処理を行ってます。 このPPUにこちらから働きかけます。 難しそうですが、結局は$21xxへのストアです。 $21xxに値をストアするというのがPPUとの手動通信です。 とりあえずすずめ愛好会のこのページを見てみましょう。 対してHDMAは自動通信です。 HDMAは「Scanline毎に$21xxの値を自動で変えてくれる物」 だということになります。 チャンネルとテーブル ついに実際に簡単なHDMA効果を作ってみます。 しかし、いきなりLevelASMから作るのは大変なので、 チートで作ることにしましょう。 テストもしやすいですし。 というわけで、代入可能なメモリビューアがついているエミュを用意しましょう。 ちなみに私が使っているのは音楽再現度的な意味でSNESGTです。 最新のβ版ではblankも考慮されている上、 指定アドレスにジャンプができるので旧版より使いやすいです。 テーブル まずHDMAをインストールしたROMを起動して好きなLevelに行き、ポーズ。 メモリビューアを開いて、HDMAテーブルのある位置を見ましょう。 初期設定ではテーブルの位置は、BMF98567氏のHDMAでは$7FFF00 ASM_Supporterでは$7FFE00と決められています。(現在の設定では$7F8190ですが変更可能) この先は後者として話を進めていきますので、 前者の場合は、各アドレスの3桁目をE⇒Fと脳内変換してください。 これからこのテーブルという領域に、 HDMAに必要な手続きを行っていきます。 そしたら先ほどインストールしたHDMA内部機構が 手続きに従い、自動的にHDMAを実行してくれるのです。 チャンネル HDMAには0〜7の8つのチャンネルがあります。 各チャンネルに「Scanline毎に$21xxの値を変える」という 一まとまりの仕事を割り振ることができます。 つまり最大同時に8種類の仕事をさせることができるのです。 ただ本家でもHDMAが使われている箇所があるので、 本家HDMAの使用チャンネルとかぶるとキャンセルされてしまうかも。 チャンネル3辺りを使えば心配無いでしょう。 本家HDMAの使用状況を知りたければ、 ここにあるデバッグ用Snes9xでHDMAをトレースしてみましょう。 補足 チャンネルとテーブルの関係 自分が理解するのに詰まったところなので勝手に補足。 さて、上記のようにHDMAには8つのチャンネルがあり、同時に最大8種類の効果を出すことができます。 色々弄れば色々効果が出せるわけですが難しい。そこで「必要事項を指定の場所に入れてくれれば後はやってやんよ」 というのがBMF98567氏の作ったものです。 まず「チャンネルの設定パラメータを入れるRAMアドレス」(=チャンネルごとのテーブル)がチャンネルごとに6つずつあります。 ここに転送方法とか弄る対象とか、設定を適宜入れていきます。 ここで設定した「転送したいデータを入れるRAMアドレス」(=転送内容のテーブル)に、弄る走査線の数などを入れていきます。 前者はxkasなどでプログラムを挿入するときに決めるもので、後から変更はできず、 後者は毎回自分の好きなところに指定する必要があります。 次項からその実践です。 実践1:サイズの異なるモザイク チャンネルの設定 まずはシンプルな1バイト入力系をやりましょう。 モザイク設定は$2106ですね。 テーブル周辺ははじめは全部00になっています。 ここにメモリビューアから入力していきます。 結論を言うと、下のスクショですね。 ここまで行く過程を説明しましょう。 まず「チャンネル3」を使うことに決めました。 図のチャンネル3テーブルに基本設定パラメータを書いていきます。 まずはチャンネルON宣言です。 テーブルの1バイト目には、下の表に従って値を入れましょう。 今回はチャンネル3なので、08ですね。 チャンネル 0 1 2 3 4 5 6 7 1バイト目の値 01 02 04 08 10 20 40 80 ただし、今すぐ入力するのはやめてください。 まだ設定が終わってないのにスイッチONにするのは自殺行為ですね。 軽くバグります。 2バイト目は、転送方式の設定です。 一番難しいところです。下の表を見ましょう。 2バイト目の値 1回分の処理の挙動 使用例 使用例で何が起こるか 00 1アドレスへ1byte書き $2106にXXを代入 モザイク設定がXXに 01 2アドレスへ1byte書き $2126にXX⇒$2127にYY ウィンドウ1左端XX、右端YY 02 1アドレスへ2byte書き $210FにXX、ついでYY レイヤー2 x座標がYYXXに 03 2アドレスへ2byte書き 拡大縮小回転マトリクス 2chに分けて画面に濃淡の演出使用してるゲーム例 アダムスファミリー 04 4アドレスへ1byte書き 思いつかん $2106は単純に1バイトを入力するものなので 00を入力します。 3バイト目は、弄る対象です。$21xxのxxを入力します。 今回は$2106モザイクなので、06です。 4〜6バイト目に、転送内容テーブルのありかを入力します。 空き場所ならどこでもいいですが、 今回は近くの$7FFE40に「転送内容」を書いていくことにします。 よって40 FE 7F 転送内容と効果 さて、ついに基礎設定が完了しました。 次はいよいよ「転送内容」を書いていきます。 さっき$7FFE40に指定したので、そこに書いていきましょう。 基本は「上から数えるScanline数⇒代入値」の繰り返しです。 こっからは好きなようにしていいですが… とりあえず上から40行分にサイズAの大モザイクをかけてみましょう。 $2106の設定はAFです。 よってまず「40 AF」と書いていきます。 画面全体にモザイクがかかるでしょうが、無視して次行きましょう。 次の40行分はモザイクをサイズ6と、少し小さくしてみます。 続きに「40 6F」と書きます。 次第に小さくして、最終的に「40 AF 40 6F 40 2F 40 00 (00)」としました。 その結果がスクショです。そのとおりになってますね。 ちなみに(00)は終了宣言です。 こうして、チートでHDMAを作ることができました。 あとは今回のチート入力を再現するLevelASMを組むだけです。 組み方は65C816プログラミングの方を見ましょう。 スクリーンあれこれ メインスクリーン、サブスクリーン このへんからだいぶ怪しい説明になります。 変なこと言ってたら直しちゃってください。 次のステップに進む前に メインスクリーン、サブスクリーンとかを知っておくといいです。 もう一度すずめ愛好会を見ましょう。 今回見るべきは、 $212C(メインスクリーン構成) $212D(サブスクリーン構成) $2131(カラー演算対象設定 $40から転記) $2132(固定色層の色) ただし、$2131に関しては、 毎フレームのNMIで$40からコピーされているで、 $2131を弄ってもすぐ潰されてしまいます。 かわりに$40を弄ればOKです。 描画される画面は、 スプライト・固定色・BG1・BG2・BG3・BG4といった層の 重ね合わせで構成されているのですが、 細かく言うともう少し複雑です。 これらの層をメインスクリーン・サブスクリーンにグループ分け。 私たちにはメインスクリーンだけが見えます。 内部でサブスクリーンというのを別に構成しておきます。 この結果を、「メインスクリーンのうちの背景層」に足し加える。(カラー演算) そういう足し算の結果、メインスクリーンの後ろにサブスクリーンがあるように見えます。 足し算というとわかりにくいですね。 サブスクリーンの内容を、プロジェクターで映し出すような感じです。 $40に関してはここでも説明しておきましょう。 $40の8つのbitを I全BS4321 と表すとすれば、それぞれ I/D…カラー演算 加or減 全/半 …カラー演算 1倍or半分(プロジェクターの威力半減) BS4321…それぞれ背景層/スプライト/BG4321。 1としたbitに対応する層へ演算する。(プロジェクターを照射する) 口頭ではわかりにくいので、実例を見ましょう。 通常のLevelでの描画構成 スクリーン構成は メイン…BG1,SP サブ …BG2,BG3 $40 = 20 (+OB....)なので、加算対象は背景層のみ。 図示すると下のよう。 さて、ここで一つ考えてみましょう。 サブスクリーンが背景層に加算されていますが、 これをやめたらどうなるでしょう? $40の値を20⇒00にしてみましょう。 「BG2、BG3、固定色」が見えなくなります。 では、背景層だけでなく、BG1にも加算するとどうなるでしょう。 $40の値を、20⇒21にしてみましょう。 プロジェクターが背景層だけでなく、レイヤー1にも照射をするという感じで、 レイヤー1にサブスクリーンの内容が映ってしまいます。 つまり、レイヤー1が透けているように見えます。 同様に、スプライトにも照射して透けさせることができますが、 スプライトのうち「前面に表示」設定のタイルは どういうわけか特別扱いを受けているようです。 こういった加算の影響を受けません。 お化け屋敷ではこれを利用して、 透けたテレサ・透けないテレサを区別しているようです。 さて、これを見ていると、 別にBG1,2,3,スプライト全てをメインスクリーンに設定してもいい気がします。 何故こんな回りくどいことをしているのか。 それは、スプライトのうち「背面に表示」設定のタイルのためです。 こう設定すると、タイルはメインスクリーンの一番後ろに行きます。 BG2をメインスクリーンに設定すると、タイルがBG2背景の後ろに表示されます。 要するに、ピーパックンとかが背景の後ろに消えてしまうのです。 一方、レイヤー2を使ったマップでは、 別にスプライトがレイヤー2に隠れても問題ありません。 なのでここではBG2はメインスクリーンに設定されています。 実践2:固定色層の応用を考える さて、上の図の中に、固定色層というのがありますね。 これについて考えてみましょう。 こいつは$2132での色設定に従った単色層です。 見ての通りSMWの通常Levelでは、これはBGカラーとして使われています。 LMで設定された背景色は、RAM $0701-$0702 に保存されていて、 ここの値が毎フレーム$2132に代入されています。 ですから$0701を弄れば固定色層の色を変えることができ、 結果背景の色が変わります。 $2132を弄るHDMAをつけてみましょう。 Scanline毎に固定色層の色を変えるって事です。 こうなると固定色層はもはや単色ではなく、 グラデーションのかかったきれいな層となります。 やり方は前回とほとんど同じです。 ▲ウホッ、いい空… 1バイト目はスイッチ。 2バイト目は転送設定。「00」 3バイト目は弄る対象が$2132だから「32」 そして転送内容データの置き場所を設定して、 そこに「走査線数」⇒「値」⇒「走査線数」⇒「値」… HDMA自体の基本は全く同じ。 今回注意したいことは、$2132の使い方が少し変則的なことです。 $2132に入力するのは、「固定色層の色」という値ではなく、 「PPUよ、R/G/Bの値をxxに変えよ!」という命令なのです。 PPUの内部で固定色層の色が(R 12)(G 02)(B 0F)となっていたとします。 図にも書いてある通り、 20 + xx の値を$2132に入力すると、 PPUはRの値をxxにしろという命令を受け、 (R xx)(G 02)(B 0F)というふうに変えます。 60 + xx の値を$2132に入力すると、 PPUはRとGの値をxxにしろという命令を受け、 (R xx)(G xx)(B 0F)というふうに変えます。 もう気づいたでしょうが、$2132への入力一発では、 RGBに同時に異なる値を設定することはできません。 転送設定「00」では、1スキャンラインで入力できるのは一回だけ。 これが不自由だと思うなら、転送設定「02」を使えばいいかも。 その場合、転送内容のところには 「Scanline数」⇒「値(1byte目)」⇒「値(2byte目)」⇒「Scanline数」… となるので、3バイト1グループになることに注意。 さて、図のグラデーションの組み方ですが、 まずScanline0の描画開始前に「LMで設定した背景色$0701」の値が (R)(G)(B)に代入されています。今回は淡い青です。 Scanline 0 …「60」RとGを00にして深い青にする Scanline 2 …「9F」Bを1F(max)にして濃い青にする Scanline 5 …「62」RとGを02にして少し明るくする Scanline 9 …「63」RとGを03にしてもう少し明るくする : : とまあ、こんな感じでグラデーションをやっていってます。 狙い通りの色合いを出すなら、やはり見ながら調整できるチートが便利。 完成したらLevelASMを組みましょう。 実践3:固定色層の応用を考える? しかしCとかで流行っているグラデーション演出は、 さっきのとは少し違ったはずです。 なんていうか、背景ではなく画面全体に色が映っているかのような。 ?での知識を活かして、こちらをやってみましょう。 まずBG1-3、SPといったレイヤーを全てメインスクリーンに移してしまいます。 こうするとサブスクリーンにあるのは固定色層のみになります。 ここでこのサブスクリーンを、メインスクリーンの全ての層、 レイヤー123・スプライト・背景に映し出せばOKです。 $40に37を代入しましょう。 この時ピーパックンなどがレイヤー2の後ろに行ってしまう問題は、 どうしようもありません。副作用だと思ってください。 この場合はピーパックンを使わないか、 ピーパックンのグラフィックルーチンを弄って フラグによっては前面に出るようにするか。 インスタントNMIを使って$0303,xにしらみつぶしにTSB #$30しまくるか。 どのみちこの設定ではレイヤー1と2の間にスプライトを挟むことはできないので まあ使わないのが一番でしょう。 さて、今回はHDMAチートの前に準備が必要です。 まずメイン/サブスクリーンの設定をしなくてはなりません。 これらはSMWでは『$2131←$40』のようにサポートされていないので、 自作のLevelASMでやる必要があります。 まずはそこから作ってみましょう。 $212C(メインスクリーン構成)に17を代入し、 $212D(サブスクリーン構成)に00を代入します。 エミュでは普通にLevelASMから直接代入してもできるんですが、 本家SMWでPPUアクセスは全てNMIに回されているのを見るに、 恐らく実機では動かないのでしょう。 従って、インスタントNMIでやります。(CMじゃry) 講座も来たことだし、xkas用でいいよね! !NMI = インスタントNMIのJSLのありかとします。 CodeStart LDA $06B6;処理は開始1回だけで十分 BEQ INIT;ステージ開始時は00になっているからINITへ RTL INIT INC $06B6;2回は行わないようにする ;INCすることで、2回目以降は ;BEQ INITされない STZ $24;ステータスバー特別扱い解除 LDA #$01; TSB $06AD; LDA #$37;固定色層を、全レイヤーに投射 STA $40 JSL !NMI;次のV-blankのときに JSL NMIset;JSL NMIsetが行われるよう予約 RTL NMIset LDA #$17;予約内容 STA $212C;メインスクリーン:全部 STZ $212D;サブスクリーン :固定色のみ RTL このLevelASMを入れたステージに行ってみましょう。 画面全体が背景色を帯びていることだと思います。(マリオは無事) $701-2を弄って、色が変わることを確認しましょう。 本来背景色だったものを前面に持ってくるギミックなので、 もともと背景色があまり使われていないスイッチ宮殿や、城等でやると映えます。 さて、単色では物足りないなら、ここでHDMAです。 背景グラデーションの時と全く同じなので、図だけを投下しておきます。 LevelASMコードも投下しておきます。 ただし、CONTENTの内容がとても長いので、 外部ファイルGRAD.binとして入れるようにしています。 自信のある人は解読してみてください。 実践3:マルチレイヤースクロール 目的 今回のテーマは「『転送内容データ』を動的に変化させる」です。 「背景としてのレイヤー2」を3D的にスクロールさせることが目的です。 今回は下の背景を3Dスクロールさせてみましょう。 (既にHDMAグラデーションをかけてあります。) そうそう、前回言い忘れてましたが、 加算グラデーションをかける時は、元の色を暗めにしておきましょう。 加算なので、RGB各成分を元の色より下げることはできませんし。 さて、普通の設定では、 雲も海のどの部分も、同じ分だけスクロールしてしまいます。 これは奇妙。 近景は速く、遠景は遅く動いて見えるようにしたいものです。 RAM $210F $210Fはレイヤー2スクロールのx座標。 むしろレイヤー2を映すカメラのx座標と言ったほうが分かりやすいかも。 LunarMagicで見るような、レイヤー2の一枚絵を 正面から映しているカメラを想像しましょう。 xが大きいほど、カメラは右にあることになります。 xを増やすと、カメラは右に進み、 すると映像ではレイヤー2が左に流れていくことになります。 図も載せときます。 普段はRAMの$1466から転記されているこの値。 これをScanlineごとに変えればいいのですが、 変える値は前回までと違って、リアルタイムに変化します。 「転送内容データ」は、今までどおり 「走査線数」⇒「転送内容(2byte)」⇒ の繰り返しです。 RAMに置いてあるこいつを、 ASMによって「転送内容(2byte)」の部分を 絶えず書き換えることが必要になります。 で、どういう値に書き換えればいいのか。 極めて遠くにあるもの 太陽・星・雲などがそうです。ここまで遠くにあると、 マリオがどこにいても同じように見えるはずです。 よって観測者の位置(レイヤー1座標)とは関係無く動くはずです。 今回は画面上の雲がそれにあたります。 この背景では雲が上中下3列あるので、 試しに各列が違う速度で左に流れるようにしてみましょう。 左に流すにはカメラを右に動かせばいいので、 「$210Fの値がどんどん増える。」ようにします。 各列の幅を計ったら、1F,20,20でうまくいったので、 「転送内容データ」のはじめの部分は 1F xxxx 20 yyyy 20 zzzz。 xxxx、yyyy、zzzzそれぞれに「違う速度で増えていく値」 がストアされるようにすればいいのです。 組み方わかる人は次の見出しまで飛ばしましょう。 まずはASMの側でカウンターを用意しましょう。 空きRAMならどこでもいいのですが… 今回は$7FFEF0を使ってみます。 毎フレームこれに1を足す。 これで$7FFEF0は「毎フレーム1増える値」として機能します。 次に$7FFEF0を使って雲をスクロールさせます。 「毎フレーム1増える」というのはマリオの歩行速度並なので 雲にしては速すぎです。 では、『$7FFEF0の1/2倍』という数字はどうでしょうか。 これは「2フレームに1増える値」として機能します。 スピードが半分になりました。 同様に、$7FFEF0の1/4倍、3/8倍という数字を使えば、 流れるスピードは1/4倍、3/8倍になります。 そこで今回は、 「上段の雲…スピード1/2」 「中段の雲…スピード3/8」 「下段の雲…スピード1/4」 としてみます。 1/2とか1/4をやるなら、ASLやLSR命令を覚えましょう。 12345という数字の各桁を右に動かすと、1234.5。1/10になってしまいます。 各桁を左に動かすと、123450。10倍になってしまいます。 これは10進法だからです。 2進法の世界では、桁を右に動かすと1/2、左に動かすと2倍になります。 LSR(右)、ASL(左)という命令がそれにあたります。 $7FFEF0にLSRした値を「上段の雲があるScanlineでの$210F値」に設定。 もう一度LSRした値を「下段の雲があるScanlineでの$210F値」に設定。 さて、中段の3/8倍という処理ですが、 $7FFEF0を『3倍してから8で割る』ことによって可能です。 注意すべきは、『8で割ってから3倍する』ではダメなこと。 なぜなら、『8で割った』値は、「8フレームに1回1増える」。 それを3倍すると、「8フレームに1回3増える」。 こういうカックカクな動きになってしまうからです。 前者をやれば「8フレームに3回1増える」ので、滑らかです。 $7FFEF0をLDA ⇒ ASL ⇒ $7FFEF0をADC ⇒ LSR3回 によって中段の値が得られます。 それほど遠くないもの 星や雲ほど遠くにある物でないならば、 こちらの動きによって見え方がかわります。 今回は海がそうです。 視点を動かしていくと、 近くのものほど速く動き、遠くのものほど遅く動きます。 視点からの遠さが同じものは、同じ速さで動くはずです。 背景の物体がもし、マリオやレイヤー1と同じ遠さにあるならば、 レイヤー1と同じ速さで(視点の動きに対し)スクロールするはずです。 このとき、$210F = レイヤー1x座標 これで視点の動きに対するスクロールが再現できます。 次に、その背景物体自体が動いてた場合。 視点の動きに加え、さらに物体自体の動きも反映させるには、 $210F = レイヤー1 x座 - 物体の移動値 なぜ引き算かというと、雲の時と同じです。 レイヤー2の静止した一枚絵が右に動く様子を再現するには、 逆にカメラを左に動かすことになるからです。 さて、以上は物体がマリオのそば、レイヤー1と同じ層にいた時の話です。 もっと遠くにあれば、視点に対してもっとゆっくりスクロールするはず。 $210F =(レイヤー1 x座 − もしレイヤー1の距離にいた場合の物体の移動値)× 距離補正 ~ これが一応最終公式となります。 今回の海に適用するとどうなるでしょう。 レイヤー1座標は$1462から得られます。 次にもし海がレイヤー1の距離、つまりマリオの足元にあった場合の移動値を考えます。 今回は波が左にマリオの歩行距離程度の速度で流れるという風にしてみましょう。 波の移動値は毎フレーム-1です。これを引くということは、 「毎フレーム+1する値を足す」のと同じです。 雲の時のカウンタ$7FFEF0を流用しましょう。 また、波なので、左に流れながらも多少ゆらゆらさせてもいいかもしれません。 「ゆらゆらする値」をさらに足しこめばOKです。 「ゆらゆらする値」の取り方の一例 LDA $14 (タイマ) AND #$0F TAX LDA WAVE,x : : WAVE db $00,$00,$00,$01,$01,$02,$03,$03 db $04,$04,$04,$03,$03,$02,$01,$01 こうして、$1462 + $7FFEF0 + WAVE,x という 『波がマリオのそばにあったときの値』を得ました。 とりあえずこれを$7FFEF2に保存しておきます。 その後最後に、距離補正を加えるために数字を掛け、 各Scanlineの$210F値としてストアします。 この掛ける数をScanline毎に色々変えることで、 視点からの距離の奥行きを表現することができます。 これがHDMAで3Dを擬似的に再現できる仕組みです。 (Scanline毎にしか奥行きを変えれないので、 同じScanlineに異なる遠さの物が置けない制限はあるが) さて、海という大変なテーマを選んでしまいました。 どのScanlineも遠さが違います。 かなり多くの段階に分けて距離補正値を変えなくてはなりません。 めんどくさいので20段階くらいに留めます。十分でしょう。 一番近い所でも、マリオよりは遠くにあるので、1倍よりは小さい。 一番遠い所、つまり水平線付近は相当遠いので、1/32倍くらいでOKしょう。 その間を20段階くらいにわけて設定する。 計算方法は自由ですが、自分が思いつく中で一番早いやり方を紹介します。 7/8, 3/4, 5/8, 1/2 7/16, 3/8, 5/16, 1/4 7/32, 3/16, 5/32, 1/8 7/64, 3/32, 5/64, 1/16 7/128,3/64, 5/128,1/32 ラインナップは上の通り。右に読んでいけば大きい(近い)順です。 分子が同じものをひとまとめに計算していきます。 まず$7FFEF2(元の値)から、 元の値の2倍⇒$7FFEF4 (ASL) 元の値の3倍⇒$7FFEF6 (更に$7FFEF2を足す) 元の値の5倍⇒$7FFEF8 (更に$7FFEF4を足す) 元の値の7倍⇒A (更に$7FFEF4を足す) と計算します。 あとはLSRLSR...で分子7のものを全部計算しつつストア。 $7FFEF8をLDAしてLSRLSR...で分子5のものを全部計算しつつストア。 同様に分子3、分子1も全部計算ストアしてミッションコンプリート。 完成品と、LevelASMコードを http //mario.ellize.com/up/src/smw_2022.zipにおいておきます。 紛失したようです。持ってる人居たら、WikiにUPお願いします。 もっといい計算法があったら言ってね。 補足 簡易説明 いきなりハードな内容で、うわぁああああとなった人が多そうなので、 まとめ兼1番簡単な多重スクロールの説明を勝手に補足。 まず雲のような、マリオとは関係なく画面を流れていくものについて。 レイヤー2の位置を毎フレーム1増やせばOK、と考える。(増やすと左に流れますね。) さて、「? 弄る走査線の本数」「? $210Fに入れたい値」をテーブルに書き込んでいくわけですが、 要するに?に毎フレーム1足せばいいだけです。 REP #$20;2byte扱うんで必要ですね。 LDA ? INC A STA ? SEP #$20;元に戻す。 これだけですね。とっても簡単。 INCの数を増やせば馬鹿みたいに早くなるし、 上を参考に何フレームに何回、という風にすればスピードも自由自在です。 次にマリオと関係して動くもの。 上の例では独立して動きつつ、マリオと関係しても動く海なので難しいですね。 ここでは地面でも山でもいいから、勝手には動かないもので練習。 レイヤー1と関係させて動かすことにしましょう。 $1462(レイヤー1の位置)の値をそのまま?に入れれば、レイヤー1とまったく同じ動きをします。 その走査線の部分だけ「レイヤー2スクロール固定」とおんなじことですね。 半分の速度で動かすには… REP #$20;2byte(ry LDA $1462 LSR A;この辺を変えることで、スクロールの早さが変わります。 STA ? SEP #$20;元に(ry これだけです。LSRの回数を増やしたりして、スクロールスピードを変えることができますね。 ちなみに$1462でなく$1466(レイヤー2位置)でもOK。 その場合LMで設定したレイヤー2のスピードに影響を受けます。 以上を理解してもう一回上を内容を読めば、理解しやすいかも? ウィンドウあれこれ 工事中 いよいよ講義1単位分程度のボリュームになってきた(笑)。 コメント欄 コメントログ 名前
https://w.atwiki.jp/36943692/
@wikiへようこそ ウィキはみんなで気軽にホームページ編集できるツールです。 このページは自由に編集することができます。 メールで送られてきたパスワードを用いてログインすることで、各種変更(サイト名、トップページ、メンバー管理、サイドページ、デザイン、ページ管理、等)することができます まずはこちらをご覧ください。 @wikiの基本操作 編集モード・構文一覧表 @wikiの設定・管理 分からないことは? @wiki ご利用ガイド よくある質問 @wiki更新情報 @wikiへのお問合せフォーム 等をご活用ください アットウィキモードでの編集方法 文字入力 画像入力 表組み ワープロモードでの編集方法 文字入力 画像入力 表組み その他にもいろいろな機能満載!! @wikiプラグイン一覧 @wikiかんたんプラグイン入力サポート バグ・不具合を見つけたら? 要望がある場合は? お手数ですが、お問合せフォームからご連絡ください。
https://w.atwiki.jp/36943692/pages/3.html
更新履歴 取得中です。 ここを編集
https://w.atwiki.jp/36943692/pages/11.html
インスタグラムプラグイン 人気の画像共有サービス、Instagram(インスタグラム)の画像をアットウィキに貼れるプラグインです。 #ig_user(ユーザー名) と記載することで、特定ユーザーのInstagramのフィードを表示することができます。 例)@dogoftheday #ig_user #ig_tags(タグ名) と記載することで、特定タグのInstagramのフィードを表示することができます。 #dogofthedayjp タグ #ig_tag #ig_popular と記載することで、Instagramのpopularフィードを表示することができます。 詳しい使い方は以下のページを参考にしてください! =>http //www1.atwiki.jp/guide/pages/935.html
https://w.atwiki.jp/36943692/pages/6.html
アーカイブ @wikiのwikiモードでは #archive_log() と入力することで、特定のウェブページを保存しておくことができます。 詳しくはこちらをご覧ください。 =>http //www1.atwiki.jp/guide/pages/921.html#id_2d967d6e たとえば、#archive_log()と入力すると以下のように表示されます。 保存したいURLとサイト名を入力して"アーカイブログ"をクリックしてみよう サイト名 URL
https://w.atwiki.jp/underlords/pages/216.html
途中、とりあえず置いておきます 無情ハンター 入門編 このガイドはAI戦ハードコアぐらいは余裕で勝ちたい!と思うぐらいの人へ送るガイドです。 無情ハンターの特徴 高い火力 爆発力 運が無くてもある程度行ける 弱点 防御面が貧弱 最終構成のイメージ 最終構成のイメージはとりえあず無情4ハンター6です。基本はこれを意識してプレイしていきます。 ハンター必須枠 ドローレンジャー、ミラナ、メドゥーサ、テラーブレード 選択枠(ここから2人) ウィンドレンジャー、ウィーバー、ビーストマスター ハンター6をやる場合はまず前半4人は間違いなく入れたほうが強いです。選択枠はどちらかと言うとウィンドレンジャーを優先します、理由としては角の冠取れた場合ヴィジラント4を狙うため。 無情 パッジ、ライフスティーラー、リッチ、シャドウデーモン、アバドン、ネクロフォス 優先順位は左からです。ドローレンジャーは必須枠なので除外。 最序盤の動き方(大体5Rまで) 無情とハンターを見た瞬間に取りましょう。AI戦なら無情とハンター以外はとりあえず取らなくていいです。 あなたはこの試合で無情ハンターをやるのです。「やるぞ!」という強い意志が必要になってきます。 最序盤では勝ったり負けたりは特に意識しなくてもいいですが、勝つに越したことはありません。でも、別に負けてもいいです。 負けた時は弱かったので、強化できるいいタイミングだと思いましょう。 レベル4には上げられるタイミングですぐ上げます。戦闘が始まる前に5ゴールドが余っていれば上げてしまいましょう。 4から5へは7ラウンドの戦闘中に2回購入して、8ラウンドが始まるのと同じタイミングでレベルが上がるようにしておくのがベストです。 T1アイテムは ヘイストグローブ>鎖かたびら>>回避のタリスマン>モービッドマスク=ヴォイドストーン>>>クレイモア=抵抗のフード>>それ以外のモノ 程度の優先度で取ります。 ヘイストグローブと鎖かたびらがあればノータイムで取りましょう。回避のタリスマン、モービッドマスク、ヴォイドストーンはほとんど好みかもしれません。 装備先は ヘイストグローブ→ハンターかライフスティーラー 最後の方は他のアイテムを優先させることが多いので余るかもしれませんが、その時は適当なヒーローにつけましょう。 ライフスティーラーにはいつでも最高の攻撃速度上昇アイテムを付けてあげましょう。彼の攻撃速度は生存能力に繋がります。 回避のタリスマン 鎖かたびら→パッジ パッジ以外には考えられません。パッジにずっとつけていてもいいでしょう。パッジにつけたいアイテムも無いでしょうし。 T2のアイテムは ストーンホールの槍 マント>クリスタリス>ドラゴンランス>ヴァンガード>(ヘイストグローブ>鎖かたびら)>ターゲットバディ=デソレーター=バリケード<それ以外 基本はストーンホールの槍とマント、クリスタリスはすぐ取ってもいいと思ってます。 ストーンホールの槍 マント→キル数を見て多いところに渡しておきましょう クリスタリス→攻撃速度の早いヒーロー、ウィーバーとか ドラゴンランス→ウィンドレンジャー ウィンドレンジャーは動く必要がなく、攻撃速度が早いためオススメです。 序盤の動きかた(大体12Rぐらいまで) レベル5は無情ハンターにとって弱い段階です。 可能な限りレベル6に素早く移行しましょう。ただ、利子を失ってまで上げる価値は薄いです。 このあたりまでは負けても勝ってもいい感じです ただ、レベル6の段階で現在所有しているヒーローを星2にしたほうがいいです。これはレベルよりも優先しましょう。 ここで無情4ハンター3にします、ハンターは星2であれば誰でも構いません。 この辺から配置を意識し始めます。 基本的には片方の壁に寄せて配置します。 いい感じの画像を置く アンダーロードの選択ですが、アネシックスを取りましょう。嬉しいのはダメージサポートの方ですが、回復の方でもかまいません。 なぜアネシックスを選択するかと言うと、この編成はテラーブレードとシャドウデーモンを使うため、悪魔が増えるとダメージが増えるからです。ダメージが増えると嬉しいですね。 中盤(20Rぐらいまで) 方針は替えず、必要なヒーローだけ取ります。 配置の方針としては T3のアイテムは 角の冠>>シルバーエッジ=狂気の仮面(1つまで)>ミダスの手=オクタリンエッセンス=レッグブレイカーのソフト帽=ブレードメイル(パッジが何も装備していなかったら)>それ以外 角の冠→ライフスティーラー いくつ取ってもいいです、1つ取れたら1つアライアンスが増えるので強いです。 リストラ候補はビーストマスターかウィーバー、。星が低い方を優先しましょう。いい感じに星が重なっていれば 追加するヒーローは基本的にタイドハンター、相手に一人もメイジ 騎士が居ない時はテンプルアサシンも狙います。テンプルアサシンを狙った場合でもタイドハンターも拾っておいて、先に星2になったほうを使いましょう。 それか、ドゥームでも構いません。ドゥームは強いですからね。 終盤(21) このへんになると新しい無情は取りません。 ハンター側は、ミラナとメドゥーサ。単体で強いので絶対に取りましょう。取らない理由が一つもありません。 T4アイテムは状況によってかなり変わってきます。 T3で角の冠が取れていて、タイドハンターを使っているならリフレッシュオーブが1番に来ます。タイドハンターを使っていないなら 屈強や騎士がいる場合はケイデンブレードをメドゥーサに。 汎用性を重視してムーンシャードをDPSの高いヒーローに装備させてもいいです。 色々考慮して、優先すべき順番は ケイデンブレード(=リフレッシュオーブ)>ムーンシャード>ディフューザルブレード=バタフライ>スカディの目=ヴァイスの大鎌>ブラックキングバー>それ以外 リフレッシュオーブだけ例外です、タイドハンターを取らなかった場合は優先度最低ですが取った場合は最高まで上がります。 ケイデンブレードは現在の環境的に、屈強が入っていない場合がほとんどなためこの位置にあります。環境が変わると変わる可能性があります。今は優先的に取るようにしましょう。 装備先はメドゥーサです。メドゥーサが居なかった場合は、ウィンドレンジャーや ムーンシャードは汎用性重視「どれを取ればいいんだろう?」と感じた時取りましょう。何個とっても困りませんが、特別に取るべき時はありません。しかし強力です。 T5は難しいです。 ほとんどの場合T5とT4が混合している状況で、何を取るかの判断が難しいです。 一概にT5>T4とは言えない場面が多いです。 優先度はほとんど付けられません。どれも強いですが、能力が複雑です。私は未だに悩みます。 一つ一つ無情ハンター的に説明していくと アルファ獣の角笛 強い。純粋に強いユニットが一体増えるため数敵有利で一気に押し切りやすい。使い所に悩むことがまったくないので、考えるのが面倒な時取りたい。 サタニック ヘルスの回復量がえげつない。装備先はテラーブレードあたり、ビーストマスターを使っているならそっちでも。 シヴァズガード これよくわかんないんですよね。弱くはないですが、そんなに取るべきではないと思います。取ったなら、パッジあたりに装備させましょう。 タラスクの心臓 いらないです。取ってもいいですが、他のやつのほうがいいと思います。 トゥームストーン いらないです。 ブラッドソーン 対メイジ用。一番長生きしそうなヒーロー、ミラナあたりに持たせるといいかもしれません。 ラディアンス パッジとかそのへんに持たせると長生きしつつ、相手にダメージが行くと思います。あんまり取りません。 不死のイージス 無情ハンターで使うことがあまりないです。 暴君の衣 強い。装備先はドローレンジャーに。
https://w.atwiki.jp/u_examination/pages/187.html
トップページ>古文>古文の勉強の仕方 古文入門 読解と演習23[amazon] コメント kore -- 名無しさん (2010-11-26 01 57 21) 名前 コメント
https://w.atwiki.jp/mini98/pages/15.html
オブジェクト指向というものを定義するとき、なかなかヒトコトで表現する事は難しいのですが、「ソフトウェアで扱う事柄について、データと操作をまとめて1つのオブジェクトとして捉える」というソフトウェア開発を指向しているもの、と表現できます(オブジェクト指向超入門)。 VB6でデータというと、変数や定数ですが、クラスのはじめにで Private や Public で宣言している変数が上記定義中の「データ」です(Private と Public はアクセス修飾子ですが、メソッド内部の変数にはこのアクセス修飾子を付ける事ができません。これが関数内ローカル変数とオブジェクト指向でいう「データ」との違いです)。 言語に依存しない言い方をすると、オブジェクト指向ではこのデータの事を「フィールド」と呼びます(メンバ変数と呼ぶ事もあります)。 操作とは、クラス内部に存在する Sub や Function で宣言されるプロシージャの事です。 Sub はサブルーチン、Function は関数を指していますが、戻り値の無いものをサブルーチン、有るものを関数としています。Microsoftはこれらをまとめてプロシージャと呼んでいます。 言語に依存しない言い方をすると、オブジェクト指向ではこのサブルーチンや関数の事を「メソッド」と呼びます。 このフィールドとメソッドという呼び名はオブジェクト指向を解説した本やサイトでは共通です。 言語の解説本ではなく、オブジェクト指向そのものを解説した本も市販されています(丁寧にオブジェクト指向を解説すれば本一冊になります)。わかりやすい本が見つかればいずれ紹介します。 オブジェクト指向の利点 現在、世の中には大規模なシステムがたくさん稼働していますが、これもオブジェクト指向の普及が一役買っていると言えます。昔であれば大規模なシステムを開発するのは大変でした。オブジェクト指向の利点により、大規模な開発が容易になったからです。「オブジェクト指向の利点」で検索してみると多数のページがヒットします。それぞれ様々な解説があります。 再利用性 オブジェクト指向の様々な解説の中でも、いちばん共通する利点は「再利用性」だと思います。オブジェクト指向プログラミング(以下OOP)では、モジュールの単位が「クラス」です。OOPではクラスをどんどん再利用して開発していきます。 また、そういったクラスを集め、web開発であろうがデスクトップアプリケーションであろうが、その開発に向いたフレームワークが存在します。似たような処理をする部分でクラスによる骨組み(フレームワーク)を作成し、個別の部分についてはそのフレームワークに付け足していくだけ、というような構成になっています(残念ながらVB6でオープンソース的フレームワークは見当たりませんが)。 他に、デザインパターンの利用が挙げられます。ある種の設計を行う場合、このようなデザインを行うとスマートに実装できる、といったパターンが存在します。古くはGOFパターンと呼ばれるものがあります。VB6ではOOP機能の制限で、これらを全て適用する事はできませんが、それでも適用可能なパターンは存在します。 カプセル化 OOPの利点に隠蔽化(カプセル化)があります。クラス内部でクラス外に見せたくないものはアクセス修飾子をPrivateにします。こうする事で、より安全な設計ができるようになりました。昔のシステムであれば、巨大な構造体からなるグローバル変数が存在し、そのいずれも簡単にアクセスでき、変更可能でしたが、そのような設計はシステムを複雑にし、わかりにくいものにしていました。かつてプログラミングで「GOTOは悪」と言われましたが、現在では「グローバル変数は悪」と言えます。 VB6でオブジェクト指向開発する利点 VB6のオブジェクト指向には様々な制限があります。継承が無い、引数付きコンストラクタを生成できない等。しかしそれでもVB6でOOPする利点はあります。 利点 インスタンス生成により、初期化が保証されている 再利用性を向上する事ができる ポリモーフィズムにより、似たような処理を共通化しコード量を抑える事ができる その他 欠点 OOP理解に多少の時間がかかる VB6のOOP機能が他の言語と異なる部分があり、市販のOOP解説本の内容も噛み砕きながら読まなければならない 私なりのオブジェクト指向定義 私なりにオブジェクト指向というものを定義するならば…世の中には様々なモノ(オブジェクト)があります。モノには必ず構造と機能が備わっています。椅子という構造があるとき、座ることができる、という機能があります。心臓という構造があるとき、循環という機能が備わっています。非オブジェクト指向言語まででは、構造体というもので構造を表現できました。その構造体に機能(メソッド)を追加したものがオブジェクトです。構造と機能を備えたオブジェクトをオブジェクト同士の作用によってソフトを作成していく方法がオブジェクト指向です。 @
https://w.atwiki.jp/madan/pages/24.html
ギルド戦に参加したいんだけど、どうすればいいの? 古都ブルンネンシュティグ中央辺りにある噴水の上の方に、なんか建物があります。 その中に転送円という光り輝く円があって、その円の中に入った状態でギルド戦開始時間を迎えると、自動的に転送されます。 転送円は輝いているのですぐわかると思いますが、わからなかったら誰かに聞いてください。 聞くも聞かぬも別に恥にはなりません。 すごーい、転送されちゃった☆敵はどこかな~? すとっぷ!ちょっと待ってください。 まずは参加者でPTを組みましょう。 補助回復支援が簡易化し、味方の位置がわかりやすくなって、なんとなく安心できます。 何度も参加して頑張っているんだけど、すぐに死んじゃって楽しめません! ちゃんと回復アイテムは持っていっていますか? 最低でもラージ~のポーションを使わないと到底回復は追いつきません。 また、『自動リロード』OP、『薬回復』OPのついた装備がないと、回復が間に合わずあっさりやられちゃいます。 特に前者は必須です。 『薬回復』は最大値200%説、250%説、その他色々な説がありますが、たぶん250%だと思われますし、どのみち250%あったほうが安心できます。 また、『健康』のステータス値が高ければ、回復速度は速くなります。 回復物資がなくなっちゃいました。街に戻っても良いですか? ダメです。 一度GVフィールドとの接続が切れてしまうと、もう戻る事は出来ません。 途中退店は無効なのです、店じゃないケド。 但し、サバ切れやバグ落ちなどで接続が切れてしまった場合は復帰できます。 なんかよくわかんないマークがいっぱい出てきてなんにも出来ないうちにやられちゃうよぉ~ 状態異常を揃えましょう。 特に『呪い抵抗』は殆ど必要不可欠みたいなものです。 とりあえずまずは100%超えを目指し、余裕が出来たら160%に上げてみると確実です。 でも、『呪い抵抗』で防げない異常は山ほどあります。 なんとか頑張って抵抗を揃えてください。 頑張って抵抗装備も揃えたのに、今度は一撃で死んじゃって何もできません。 HPを上げてください。 GVでは防御力よりもHPを優先して上げる事をお勧めします。 というかそっちのほうが効率的です。 例えば防御1000でHP3000の人と、防御3000でHP1000の人だと、前者の方が比較的致死率が低くなります。 後者が10回死ぬうちに前者は1回も死なないかもしれないくらい違います。 一気にぐぐ~んと強くなれる方法はないかなぁ? 無いと思ってください。 場数を踏んで慣れれば、死線の位置がわかってきます。 つまり『これ以上~するとやられてしまう』、とか、まぁ、引き際がわかってきますって事でしょうか。 ただしそれでも死んでしまう時は死んでしまいます。 誰かがやられないとGVは進行しません。 ギルマスに申請するなり他ギルドに一時留学するなりしていつもより強い相手と戦い続けてみれば、結構強くなれます。 ただし、即死クラスの相手と戦っても、何も出来ないだけで終わるので、匙加減には注意。 それ以前にレベルが低い場合は、もう仕方が無いです、レベルを上げてください。 180程度になってくれば、その後は相手のレベルが自分より200ぐらい上でも生き残れます。(防御・逃走に専念すれば、ですが。)